<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <title>Examples</title>
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <meta name="description" content="" />
  <meta name="keywords" content="" />
  <link href="" rel="stylesheet" />
</head>

<body>
  <div id="root">
    {{reverse}}
    {{num}}
    {{content}}
  </div>
  <script src="../vue.js"></script>
  <script>
    var vm = new Vue({
      el: "#root",
      data: {
        title: 'hello',
        num: 100,
      },
      //计算属性是属性，不用执行
      // 缺点：计算属性不能传值   
      computed: {
        reverse() {
          console.log('run...');
        this.foo()
          //    基于依赖缓存
          return this.title.split('').reverse('').join('');
        // 不在计算属性具有副作用的计算
        //   setTimeout(()=>{
        //     return this.title.split('').reverse('').join('');
        //   },2000)
        }
      },
      //methods是函数需要执行以下
      methods: {
        //    不会基于依赖缓存
        doReverse() {
          console.log('methods run...');
          //    基于依赖缓存
          return this.title.split('').reverse('').join('');
        },
        foo() {
          console.log('foo...');
        },
      },
      // watch也是函数，函数的名字是观察对象的名字
      watch: {
        // 观察具有响应特性的数据
        title(newVal, oldVal) {
          // console.log(newVal)
          // 异步操作
          // ajax请求
          setTimeout(()=>{
            this.title = 'abc'
          },2000)
        },
        content(){
          console.log('content change')
        }
      },
      beforeCreate() {
        this.content = 'balabala...'
      },
      mounted() {
        // this.title = 'world'
        // this.num = 1000;
        // this.content = 'anywhere'
      },

    })
    // 去掉run...提示
    Vue.config.productionTip = false
  </script>
</body>

</html>